package br.com.JZSolution.domineduplex.gui.preferencias;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import br.com.JZSolution.domineduplex.DomineDuplex;
import br.com.JZSolution.domineduplex.controle.ControladorDePreferencias;
import br.com.JZSolution.domineduplex.controle.ControladorDeUsuario;
import br.com.JZSolution.domineduplex.gui.dialogos.CadastroDialogo;
import br.com.JZSolution.domineduplex.gui.util.ComunicadorDeMensagens;

public class PainelDeLoginPreferencias extends JPanel {
	
	private JLabel loginLabel;
	private JLabel senhaLabel;
	private JTextField login;
	private JPasswordField senha;
	private JButton atualizar;
	private JButton cadastrar;
	private JCheckBox contatos;
	private JCheckBox salvarInfo;
	private JRadioButton salvarUsuario;
	private JRadioButton salvarUsuarioSenha;
	private ButtonGroup grupo ;
	private ControladorDePreferencias cdp = ControladorDePreferencias.getInstance();
	
	public PainelDeLoginPreferencias(){
		super(new BorderLayout());
		this.setPreferredSize(new Dimension(300,200));
		contatos = new JCheckBox("Utilizar contatos");
		contatos.addMouseListener(new MouseAdapter(){
			@Override
			public void mouseClicked(MouseEvent e) {
				setLoginEnable(contatos.isSelected());
			}
		});
		
		loginLabel = new JLabel("Email: ");
		loginLabel.setPreferredSize(new Dimension(80,30));
		login = new JTextField();
		login.setPreferredSize(new Dimension(150,30));
		JPanel panelLogin = new JPanel(new FlowLayout(FlowLayout.LEFT));
		panelLogin.add(loginLabel);
		panelLogin.add(login);
		
		senhaLabel = new JLabel("Senha: ");
		senhaLabel.setPreferredSize(new Dimension(80,30));
		senha = new JPasswordField();
		senha.setPreferredSize(new Dimension(150,30));
		JPanel panelSenha = new JPanel(new FlowLayout(FlowLayout.LEFT));
		panelSenha.add(senhaLabel);
		panelSenha.add(senha);
		
		atualizar = new JButton("Atualizar contatos");
		atualizar.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				login(login.getText(),senha.getPassword());
			}
		});
		cadastrar = new JButton("Cadastrar...");
		cadastrar.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				CadastroDialogo cadDiag = new CadastroDialogo();
				cadDiag.setVisible(true);
			}
		});
		
		salvarInfo = new JCheckBox("Salvar informações");
		salvarInfo.addMouseListener(new MouseAdapter(){
			@Override
			public void mouseClicked(MouseEvent e) {
				salvarUsuario.setEnabled(salvarInfo.isSelected());
				salvarUsuarioSenha.setEnabled(salvarInfo.isSelected());
				if(grupo.getSelection() == null)
					grupo.setSelected(salvarUsuario.getModel(), true);
			}
		});
		
		salvarUsuario  = new JRadioButton("Salvar email");
		salvarUsuarioSenha  = new JRadioButton("Salvar email e senha");
		salvarUsuario.setEnabled(salvarInfo.isSelected());
		salvarUsuarioSenha.setEnabled(salvarInfo.isSelected());
		
		grupo = new ButtonGroup();
		grupo.add(salvarUsuario);
		grupo.add(salvarUsuarioSenha);
		
		JPanel panelBtns = new JPanel(new FlowLayout(FlowLayout.LEFT));
		
		panelBtns.add(atualizar);
		panelBtns.add(cadastrar);
		
		JPanel panelPersistencia = new JPanel(new GridLayout(3,0));
		panelPersistencia.add(salvarInfo,0);
		panelPersistencia.add(salvarUsuario,1);
		panelPersistencia.add(salvarUsuarioSenha,2);
		
		JPanel panelCampos = new JPanel(new GridLayout(6,0));
		panelCampos.add(panelLogin,0);
		panelCampos.add(panelSenha,1);
		panelCampos.add(panelBtns,2);
		panelCampos.add(salvarInfo,3);
		panelCampos.add(salvarUsuario,4);
		panelCampos.add(salvarUsuarioSenha,5);
		panelCampos.setPreferredSize(new Dimension(260,300));
		
		this.add(contatos,BorderLayout.NORTH);
		this.add(panelCampos,BorderLayout.CENTER);
		this.add(panelPersistencia,BorderLayout.SOUTH);
		
		carregarInfos();
		setLoginEnable(contatos.isSelected());
	}

	public void setLoginEnable(boolean ativo){
		loginLabel.setEnabled(ativo);
		senhaLabel.setEnabled(ativo);
		login.setEnabled(ativo);
		senha.setEnabled(ativo);
		atualizar.setEnabled(ativo);
		cadastrar.setEnabled(ativo);
		salvarInfo.setEnabled(ativo);
		salvarUsuario.setEnabled(ativo && salvarInfo.isSelected());
		salvarUsuarioSenha.setEnabled(ativo && salvarInfo.isSelected());
	}
	
	
	
	private void login(String login,char[] senha){
		String resp = ControladorDeUsuario.getInstance().autenticarUsuario(login,new String(senha));
		if(!resp.equals("ok")){
			ComunicadorDeMensagens.erro(resp);
		}
	}

	public void salvarInfos() {
		
		cdp.setPropriedade("contatos", contatos.isSelected()+"");
		cdp.setPropriedade("salvarInfo", salvarInfo.isSelected()+"");
		cdp.setPropriedade("salvarUsuario", salvarUsuario.isSelected()+"");
		cdp.setPropriedade("salvarUsuarioSenha", salvarUsuarioSenha.isSelected()+"");
		if(salvarUsuarioSenha.isSelected()){
			cdp.setPropriedade("login", login.getText());
			cdp.setPropriedade("senha", new String(senha.getPassword()));
		}else if(salvarUsuario.isSelected()){
			cdp.setPropriedade("login", login.getText());
			cdp.setPropriedade("senha", "");
		}else{
			cdp.setPropriedade("login", "");
			cdp.setPropriedade("senha", "");
		}
	}
	
	private void carregarInfos() {
		boolean temp = Boolean.parseBoolean(cdp.getPropriedade("contatos"));;
		contatos.setSelected(temp);
		temp = Boolean.parseBoolean(cdp.getPropriedade("salvarInfo"));
		salvarInfo.setSelected(temp);
		
		temp = Boolean.parseBoolean(cdp.getPropriedade("salvarUsuarioSenha"));
		salvarUsuarioSenha.setSelected(temp);
		if(temp && salvarInfo.isSelected()){
			senha.setText(cdp.getPropriedade("senha"));
			login.setText(cdp.getPropriedade("login"));
			grupo.setSelected(salvarUsuarioSenha.getModel(), true);
			grupo.setSelected(salvarUsuario.getModel(), false);
		}else{
			grupo.setSelected(salvarUsuarioSenha.getModel(), false);
			grupo.setSelected(salvarUsuario.getModel(), true);
		}
		temp = Boolean.parseBoolean(cdp.getPropriedade("salvarUsuario"));
		if(temp && salvarInfo.isSelected()){
			salvarUsuario.setSelected(temp);
			login.setText(cdp.getPropriedade("login"));
		}
		
	}
}
